//
// Created by 子夜求知 on 2022/9/18.
// 本头文件存储
//

#ifndef GRAPHPROJECT_GRAPHSAVESTRUCT_H
#define GRAPHPROJECT_GRAPHSAVESTRUCT_H
#define MaxVertexNum 100    // 图中顶点数目的最大值
typedef char VertexType;
typedef int EdgeType;       // 带权图中边上权值的数据类型

/**
 *  ArcNode:弧结点（边表节点）
 */
typedef struct ArcNode{
    int adjvex;             // 该弧所指向的顶点的位置
    struct ArcNode *next;   // 指向下一条弧的指针
    int info;               // 网的边权值
} ArcNode;

/**
 *  VNode:顶点表节点
 */
typedef struct VNode{
    VertexType data;               // 顶点信息
    ArcNode *first;         // 指向第一条依附该顶点的弧指针
} VNode,AdjList[MaxVertexNum];

/**
 * ALGraph：是以邻接表存储的图类型
 */
typedef struct {
    AdjList  vertices;      // 邻接表
    int vexnum,arcnum;      // 图的顶点数和弧数
}ALGraph;                   // ALGraph 是以邻接表存储的图类型

/**
 * InAndOutDegree:存储一个图每个顶点的入读和出度数组
 */
typedef struct {
    int indegree[MaxVertexNum];
    int outdegree[MaxVertexNum];
} InAndOutDegree;

/**
 * 图的邻接矩阵存储结构定义如下：
 */
typedef struct {
    VertexType Vex[MaxVertexNum];   // 顶点表
    EdgeType Edge[MaxVertexNum][MaxVertexNum];  // 邻接矩阵表，边表
    int vexnum,arcnum;      // 图的当前顶点数和弧数
}ArrayGraph;
#endif //GRAPHPROJECT_GRAPHSAVESTRUCT_H

